package org.hot100_1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class leetcode9 {

    /**
     * 滑动窗口思想：终止节点已经确定，需要动态的修改起始节点，让起始节点到终止节点中的窗口的数据符合要求
     */
    public List<Integer> findAnagrams(String s, String p) {

        List<Integer> res = new ArrayList<>();

        int sLength  =s.length();
        int pLength  =p.length();


        if (pLength>sLength){
            return res;
        }

        char [] sCount = new char[26];
        char [] pCount = new char[26];

        for (int i = 0; i < pLength; i++) {
            sCount[s.charAt(i)-'a']++;
            pCount[p.charAt(i)-'a']++;
        }

        if (Arrays.equals(sCount,pCount)){
            res.add(0);
        }

        for (int i = 0; i < sLength-pLength; i++) {
            //移动窗口的左侧，同时修改窗口的右侧，并判断修改后的窗口是否符合要求。
            sCount[s.charAt(i)-'a']--;
            sCount[s.charAt(i+pLength)-'a']++;

            if (Arrays.equals(sCount,pCount)){
                res.add(i+1);
            }

        }

        return res;
    }
}
